利用 phpqrcode 二维码生成类库和 imagecopymerge 函数制作带二维码的图片
首先引用phpqrcode类库
-
下载phpqrcode类库
下载地址就不提供了,百度一搜一大把;
-
新建php文件用于创建二维码
请注意看(每段中文后面都会有一定的代码示例) 比如:新建文件 qrcode.php 之后在文件中引入phpqrcode类库 代码演示 include('../phpqrcode/phpqrcode.php'); 而后就到了设置二维码的链接地址了 $url = 'http://www.baidu.com'; 接着设置二维码的容错级别,何为容错级别?通俗点就是容错级别百分比越高,就越容易识别,下面是三种容错级别: L(QR_ECLEVEL_L,7%),M(QR_ECLEVEL_M,15%),Q(QR_ECLEVEL_Q,25%),H(QR_ECLEVEL_H,30%); 按照效果排序依次是 H -> Q -> M -> L 所以,就直接用 H 代码示例: $errorCorrectionLevel = 'H';//容错级别 而后继续设置生成二维码图片的大小 $matrixPointSize = 7;//图片大小慢慢自己调整,只要是int就行 设置生成二维码的图片名称,博主用了5为随机数+时间戳生成文件名,为了防止文件名重复相互覆盖。。 QR = rand(10000,99999).time().".png"; 最后就到了生成二维码啦! 直接调用ORcode::png()就行,带上刚才设置好的参数。最后的这个参数*2*是代表白边的宽度。 QRcode::png($url, $QR, $errorCorrectionLevel, $matrixPointSize, 2);
-
如果你想在二维码中间放个LOGO那么你就继续看!
首先,引用一张图片(you company LOGO) $logo = './images/logo.png'; 而后为了程序的完整性,简单的判断一下。也许某些童鞋不要LOGO的,注意看下面的代码,博主注释的都比较清楚的。
if ($logo !== FALSE) { $QR = imagecreatefromstring(file_get_contents($QR)); $logo = imagecreatefromstring(file_get_contents($logo)); $QR_width = imagesx($QR);//二维码图片宽度 $QR_height = imagesy($QR);//二维码图片高度 $logo_width = imagesx($logo);//logo图片宽度 $logo_height = imagesy($logo);//logo图片高度 $logo_qr_width = $QR_width / 5; $scale = $logo_width/$logo_qr_width; $logo_qr_height = $logo_height/$scale; $from_width = ($QR_width - $logo_qr_width) / 2; //重新组合图片并调整大小 imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width, $logo_qr_height, $logo_width, $logo_height); }
-
最后直接输出图像即可
还是老样子,我们给图片来个名字;这次用6为随机数+时间戳 $QRM = rand(100000,999999).time().".png"; imagepng($QR, $QIMG); 而后输出图像 echo '<img src="'.$QIMG.'">';
整个带logo的二维码生成就完成了。如果还要拼合在其他图像上就继续接着看!(文章结尾有整个项目的代码,记得点赞!)
imagecopymerge函数制拼合(镶嵌,合并)图片 同样适合水印之类的
-
首先还是设置图片,底图和上面的覆盖图
$dst_path = 'a.png';//底图 $src_path = $QIMG;//覆盖图,我们就继续用上面的那张图QIMG
-
创建图片的实例
$dst = imagecreatefromstring(file_get_contents($dst_path)); $src = imagecreatefromstring(file_get_contents($src_path));
-
获取覆盖图片的宽高
list($src_w, $src_h) = getimagesize($src_path);
-
将图片复制到目标图片(底图)上,最后个参数是设置透明度(50为半透明,100为不透明,自己随意设置即可),这里实现不透明效果,两个20是控制图片坐标位置,自己慢慢调整
imagecopymerge($dst, $src, 20, 20, 0, 0, $src_w, $src_h, 100);
-
如果水印图片本身带透明色,则使用imagecopy方法
imagecopy($dst, $src, 10, 10, 0, 0, $src_w, $src_h);//博主的不是透明的,所以不用这段~用下面的
-
生成图片
list($dst_w, $dst_h, $dst_type) = getimagesize($dst_path);
而后用switch判断一下图片的类型
switch ($dst_type) {
case 1://GIF
header('Content-Type: image/gif');
imagegif($dst);
break;
case 2://JPG
header('Content-Type: image/jpeg');
imagejpeg($dst);
break;
case 3://PNG
header('Content-Type: image/png');
imagepng($dst);
break;
default:
break;
}
-
最后将图片打印出来
imagedestroy($dst); imagedestroy($src);
整个程序的完整代码,伸手党们!记得点赞打赏收藏等等等等!
include('../phpqrcode/phpqrcode.php');
$url = 'http://www.baidu.com'; //二维码内容
$errorCorrectionLevel = 'H';//容错级别
$matrixPointSize = 7;//生成图片大小
//生成二维码图片
$QR = rand(10000,99999).time().".png";
QRcode::png($url, $QR, $errorCorrectionLevel, $matrixPointSize, 2);
$logo = '../images/logo.png';//准备好的logo图片
//生成时间戳处理覆盖图片防止权限的存在
// $op = time();
// $QR = 'qrcode.png';//已经生成的原始二维码图
if ($logo !== FALSE) {
$QR = imagecreatefromstring(file_get_contents($QR));
$logo = imagecreatefromstring(file_get_contents($logo));
$QR_width = imagesx($QR);//二维码图片宽度
$QR_height = imagesy($QR);//二维码图片高度
$logo_width = imagesx($logo);//logo图片宽度
$logo_height = imagesy($logo);//logo图片高度
$logo_qr_width = $QR_width / 5;
$scale = $logo_width/$logo_qr_width;
$logo_qr_height = $logo_height/$scale;
$from_width = ($QR_width - $logo_qr_width) / 2;
//重新组合图片并调整大小
imagecopyresampled($QR, $logo, $from_width, $from_width, 0, 0, $logo_qr_width,
$logo_qr_height, $logo_width, $logo_height);
}
//输出图片
$QIMG = rand(100000,999999).time().".png";
imagepng($QR, $QIMG);
$dst_path = 'a.png';//底图
$src_path = $QIMG;//覆盖图
//创建图片的实例
$dst = imagecreatefromstring(file_get_contents($dst_path));
$src = imagecreatefromstring(file_get_contents($src_path));
//获取覆盖图图片的宽高
list($src_w, $src_h) = getimagesize($src_path);
//将覆盖图复制到目标图片上,最后个参数100是设置透明度(100是不透明),这里实现不透明效果,两个20是覆盖图坐标位置
imagecopymerge($dst, $src, 20, 20, 0, 0, $src_w, $src_h, 100);
//如果覆盖图图片本身带透明色,则使用imagecopy方法
//imagecopy($dst, $src, 10, 10, 0, 0, $src_w, $src_h);
//输出图片
list($dst_w, $dst_h, $dst_type) = getimagesize($dst_path);
switch ($dst_type) {
case 1://GIF
header('Content-Type: image/gif');
imagegif($dst);
break;
case 2://JPG
header('Content-Type: image/jpeg');
imagejpeg($dst);
break;
case 3://PNG
header('Content-Type: image/png');
imagepng($dst);
break;
default:
break;
}
imagedestroy($dst);
imagedestroy($src);
源代码理解不了的,请看上面的文章,我都写的比较清楚,代码里面也注释了~遇到问题解决不了请百度,实在不行就留言给博主,博主会第一时间回复你!
大功告成,博主要看巴萨打拉斯帕尔马斯了!但愿我梅老板能再继续进逆天任意球!
okey bye see you!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。